//
//  main.m
//  ocDay1_类和对象
//
//  Created by dllo on 16/5/20.
//  Copyright © 2016年 lanou. All rights reserved.
//

#import <Foundation/Foundation.h>
//引入头文件
#import "Student.h"
#import "Phone.h"
#import "Car.h"
#import "Teacher.h"

int main(int argc, const char * argv[]) {
    
//    // 自动释放池
//    @autoreleasepool {
//        /* 
//         面向对象和面向过程:
//         面向过程: 以事件为中心,关注的是完成时间的详细步骤,一步一步该如何实现.
//         面向对象: 以事物为中心,关注的是每个事物具有的行为和特征,而完成事件只是事物所具有的功能中的几个小的功能.
//         
//         OO:面向对象
//         OOP:面向对象编程
//         
//         类:具备相同特征和行为的事物的抽象,其实就可以理解为C语言中的数据类型,是一个抽象的概念.
//         对象:类的实例,类的具体表现,生活中的万事万物皆是对象,对象相当于变量,占内存空间.
//         
//         
//
//         
//         
//         
//         
//         */
//        
//        //C语言中的打印
//        //printf("hello world\n");
//        
//        
//        //OC中的打印    自动换行
////        NSLog(@"hello world");
////        
////        //C语言中的整型
////        int a = 10;
////        NSLog(@"a = %d",a);
////        
////        //OC中的整型
////        NSInteger num = 20;
////        NSLog(@"%ld", (long)num);
//        
//        //C语言中的字符串
//        char a[] = "嘿嘿";
//        printf("%s\n",a);
//        
//        //OC中的字符串
//        NSString *name = @"老赵";
//        //%@   OC中字符串类型的占位符(也是对象类型的占位符)
//        NSLog(@"%@",name);
//        
//        
//        
//    }
    
    @autoreleasepool {
        //对象的创建
        
        //对象的创建需要经历两个过程:1,开辟空间  2,初始化
        
        //+号方法:类名调用
        //-号方法:对象调用
        //alloc +号方法  作用是开辟空间
//        Student *stu = [Student alloc];
//        
//        //init -号方法  作用是初始化
//        stu = [stu init];
//        
//        
//        //对象的终极创建方法
//      Student *stu = [[Student alloc] init];
//        
//        //类的-方法的调用
//        [stu sayHello];
//        
//        //类的+方法的调用
//        [Student helloSay];
        
        
        //练习
     //   Phone *pho = [[Phone alloc] init];
#if 0
        [pho smallPhone];
        [Phone bigPhone];
        
        [pho textOneWithName:@"老赵"];
        
        [pho textTwoWithName:@"老赵" withAge:18];
#endif
        
//        Phone *ph1 = [[Phone alloc] init];
//        Phone *ph2 = [[Phone alloc] init];
//        [ph1 myInput];
//        [ph2 myPrint];
        
        
//        Car *car1 = [[Car alloc] init];
//        
////        [car1 myCarInput];
////        [car1 myCarPrint];
//        [car1 myCarInputWithName:@"桑塔纳" withNumer:7894 withColor:@"黑色"];
//        [car1 myCarPrint];
        /*
         实例变量可见度:
         @public:公开的,可以在本类和子类中直接访问,可以在其他类文件中通过  对象->实例变量 访问
         @protected:受保护的,可以在本类和子类中直接访问,其他文件不可访问,默认可见度.
         @private:私有的,只有本类中可以访问.
         
         
         问:为什么默认可见度不是私有的?
         答:私有的,只能在本类中使用,子类中都不可以使用,这不符合面向对象的继承特点.
         
         
         */
        Car *yourCar = [[Car alloc] init];
        
        yourCar->_name = @"时风";
        yourCar->_number = 4567;
        yourCar->_color =@"skyBlue";
        
        [yourCar myCarPrint];
        
        //设置器  访问器
        //setter getter方法
        //作用是对单一实例变量进行赋值  和  取值操作
        
        [yourCar setName:@"奔驰c600"];
        NSLog(@"%@",yourCar->_name);
        
        
        NSString *name = [yourCar name];
        NSLog(@"%@",name);
        
        
        Teacher *myTeacher = [[Teacher alloc] init];
        [myTeacher setName:@"老黑"];
        [myTeacher setGender:@"男"];
        [myTeacher teacherPrint];
        
        
    }
    
    
    
    
    
    
    return 0;
}
